package com.eisula.sc.database;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.annotations.Proxy;

@Entity
@Table(name = "t_persona")
@Proxy(lazy = false)
public class Persona {

	private int id;
	private String nombre;
	private String apellido;
	private char sexo;
	private String parentescoJefeHogar;
	private Date fechaNacimiento;
	private boolean esAnalfabeta;
	private boolean aisteEstablecimientoEducacion;
	private String respEstablecimientoEducacion;
	private String beneficioEstablecimientoEducacion;
	private String cursoCapacitacion;
	private String nivelEducativo;
	private int ultimoGradoAprobado;
	private String profesion;
	private String situacionConyugal;
	private String ingresoMensual;
	private String otrasHabilidades;
	private int edadNacimientoPrimerHijo;
	private boolean tienePareja;
	private boolean haAsistidoServicioSalud;
	private int numeroHijosNacidosVivos;
	private int numeroHijosAunViven;
	private boolean seEncuentraEmbarazada;
	private boolean asisteControlMedicoParental;

	private Telefono telefonoId;
	private Hogar hogarId;
	private List<PersonaMisionEducativa> personaMisionEducativaList;
	private DocumentoIdentificacion documentoIdentificacionId;
	private List<PersonaProgramaMision> personaProgramaMisionList;
	private List<HabilidadArtisticaManual> habilidadArtisticaManualList;
	private List<PersonaRecursoTareaEducativa> personaRecursoTareaEducativaList;
	private List<Deporte> deporteList;
	private Credito creditoId;
	private List<PersonaIdioma> personaIdiomaList;
	private List<Discapacidad> discapacidadList;
	private List<SistemaPrevencionSocial> sistemaPrevencionSocialList;
	private List<LugarAsistenciaMedica> lugarAsistenciaMedicaList;
	private List<RazonAcudirEstablecimientoSalud> razonAcudirEstablecimientoSaludList;
	private List<EnfermedadPadecida> enfermedadPadecidaList;
	private List<AparatoMedico> aparatoMedicoList;
	private List<Vacuna> vacunaList;
	private List<PlanificacionFamiliar> planificacionFamiliarList;
	private Empleo empleoId;

	// --------------------------------------------------------------------------------

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	// --------------------------------------------------------------------------------

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	// --------------------------------------------------------------------------------

	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}

	// --------------------------------------------------------------------------------

	public char getSexo() {
		return sexo;
	}

	public void setSexo(char sexo) {
		this.sexo = sexo;
	}

	// --------------------------------------------------------------------------------

	public String getParentescoJefeHogar() {
		return parentescoJefeHogar;
	}

	public void setParentescoJefeHogar(String parentescoJefeHogar) {
		this.parentescoJefeHogar = parentescoJefeHogar;
	}

	// --------------------------------------------------------------------------------

	public Date getFechaNacimiento() {
		return fechaNacimiento;
	}

	public void setFechaNacimiento(Date fechaNacimiento) {
		this.fechaNacimiento = fechaNacimiento;
	}

	// --------------------------------------------------------------------------------

	public boolean isEsAnalfabeta() {
		return esAnalfabeta;
	}

	public void setEsAnalfabeta(boolean esAnalfabeta) {
		this.esAnalfabeta = esAnalfabeta;
	}

	// --------------------------------------------------------------------------------

	public boolean isAisteEstablecimientoEducacion() {
		return aisteEstablecimientoEducacion;
	}

	public void setAisteEstablecimientoEducacion(
			boolean aisteEstablecimientoEducacion) {
		this.aisteEstablecimientoEducacion = aisteEstablecimientoEducacion;
	}

	// --------------------------------------------------------------------------------

	public String getRespEstablecimientoEducacion() {
		return respEstablecimientoEducacion;
	}

	public void setRespEstablecimientoEducacion(
			String respEstablecimientoEducacion) {
		this.respEstablecimientoEducacion = respEstablecimientoEducacion;
	}

	// --------------------------------------------------------------------------------

	@Column(nullable = true)
	public String getBeneficioEstablecimientoEducacion() {
		return beneficioEstablecimientoEducacion;
	}

	public void setBeneficioEstablecimientoEducacion(
			String beneficioEstablecimientoEducacion) {
		this.beneficioEstablecimientoEducacion = beneficioEstablecimientoEducacion;
	}

	// --------------------------------------------------------------------------------

	public String getCursoCapacitacion() {
		return cursoCapacitacion;
	}

	public void setCursoCapacitacion(String cursoCapacitacion) {
		this.cursoCapacitacion = cursoCapacitacion;
	}

	// --------------------------------------------------------------------------------

	public String getNivelEducativo() {
		return nivelEducativo;
	}

	public void setNivelEducativo(String nivelEducativo) {
		this.nivelEducativo = nivelEducativo;
	}

	// --------------------------------------------------------------------------------

	public int getUltimoGradoAprobado() {
		return ultimoGradoAprobado;
	}

	public void setUltimoGradoAprobado(int ultimoGradoAprobado) {
		this.ultimoGradoAprobado = ultimoGradoAprobado;
	}

	// --------------------------------------------------------------------------------

	public String getProfesion() {
		return profesion;
	}

	public void setProfesion(String profesion) {
		this.profesion = profesion;
	}

	// --------------------------------------------------------------------------------

	public String getSituacionConyugal() {
		return situacionConyugal;
	}

	public void setSituacionConyugal(String situacionConyugal) {
		this.situacionConyugal = situacionConyugal;
	}

	// --------------------------------------------------------------------------------

	public String getIngresoMensual() {
		return ingresoMensual;
	}

	public void setIngresoMensual(String ingresoMensual) {
		this.ingresoMensual = ingresoMensual;
	}

	// --------------------------------------------------------------------------------

	public String getOtrasHabilidades() {
		return otrasHabilidades;
	}

	public void setOtrasHabilidades(String otrasHabilidades) {
		this.otrasHabilidades = otrasHabilidades;
	}

	// --------------------------------------------------------------------------------

	public int getEdadNacimientoPrimerHijo() {
		return edadNacimientoPrimerHijo;
	}

	public void setEdadNacimientoPrimerHijo(int edadNacimientoPrimerHijo) {
		this.edadNacimientoPrimerHijo = edadNacimientoPrimerHijo;
	}

	// --------------------------------------------------------------------------------

	public boolean isTienePareja() {
		return tienePareja;
	}

	public void setTienePareja(boolean tienePareja) {
		this.tienePareja = tienePareja;
	}

	// --------------------------------------------------------------------------------

	public boolean isHaAsistidoServicioSalud() {
		return haAsistidoServicioSalud;
	}

	public void setHaAsistidoServicioSalud(boolean haAsistidoServicioSalud) {
		this.haAsistidoServicioSalud = haAsistidoServicioSalud;
	}

	// --------------------------------------------------------------------------------

	public int getNumeroHijosNacidosVivos() {
		return numeroHijosNacidosVivos;
	}

	public void setNumeroHijosNacidosVivos(int numeroHijosNacidosVivos) {
		this.numeroHijosNacidosVivos = numeroHijosNacidosVivos;
	}

	// --------------------------------------------------------------------------------

	public int getNumeroHijosAunViven() {
		return numeroHijosAunViven;
	}

	public void setNumeroHijosAunViven(int numeroHijosAunViven) {
		this.numeroHijosAunViven = numeroHijosAunViven;
	}

	// --------------------------------------------------------------------------------

	public boolean isSeEncuentraEmbarazada() {
		return seEncuentraEmbarazada;
	}

	public void setSeEncuentraEmbarazada(boolean seEncuentraEmbarazada) {
		this.seEncuentraEmbarazada = seEncuentraEmbarazada;
	}

	// --------------------------------------------------------------------------------

	public boolean isAsisteControlMedicoParental() {
		return asisteControlMedicoParental;
	}

	public void setAsisteControlMedicoParental(boolean asisteControlMedicoParental) {
		this.asisteControlMedicoParental = asisteControlMedicoParental;
	}

	// --------------------------------------------------------------------------------

	@OneToOne
	public Telefono getTelefonoId() {
		return telefonoId;
	}

	public void setTelefonoId(Telefono telefonoId) {
		this.telefonoId = telefonoId;
	}

	// --------------------------------------------------------------------------------

	@ManyToOne
	public Hogar getHogarId() {
		return hogarId;
	}

	public void setHogarId(Hogar hogarId) {
		this.hogarId = hogarId;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<PersonaMisionEducativa> getPersonaMisionEducativaList() {
		return personaMisionEducativaList;
	}

	public void setPersonaMisionEducativaList(
			List<PersonaMisionEducativa> personaMisionEducativaList) {
		this.personaMisionEducativaList = personaMisionEducativaList;
	}

	// --------------------------------------------------------------------------------

	@OneToOne
	public DocumentoIdentificacion getDocumentoIdentificacionId() {
		return documentoIdentificacionId;
	}

	public void setDocumentoIdentificacionId(DocumentoIdentificacion documentoIdentificacionId) {
		this.documentoIdentificacionId = documentoIdentificacionId;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<PersonaProgramaMision> getPersonaProgramaMisionList() {
		return personaProgramaMisionList;
	}

	public void setPersonaProgramaMisionList(
			List<PersonaProgramaMision> personaProgramaMisionList) {
		this.personaProgramaMisionList = personaProgramaMisionList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<HabilidadArtisticaManual> getHabilidadArtisticaManualList() {
		return habilidadArtisticaManualList;
	}

	public void setHabilidadArtisticaManualList(
			List<HabilidadArtisticaManual> habilidadArtisticaManualList) {
		this.habilidadArtisticaManualList = habilidadArtisticaManualList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<PersonaRecursoTareaEducativa> getPersonaRecursoTareaEducativaList() {
		return personaRecursoTareaEducativaList;
	}

	public void setPersonaRecursoTareaEducativaList(
			List<PersonaRecursoTareaEducativa> personaRecursoTareaEducativaList) {
		this.personaRecursoTareaEducativaList = personaRecursoTareaEducativaList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<Deporte> getDeporteList() {
		return deporteList;
	}

	public void setDeporteList(List<Deporte> deporteList) {
		this.deporteList = deporteList;
	}

	// --------------------------------------------------------------------------------

	@OneToOne
	public Credito getCreditoId() {
		return creditoId;
	}

	public void setCreditoId(Credito creditoId) {
		this.creditoId = creditoId;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<PersonaIdioma> getPersonaIdiomaList() {
		return personaIdiomaList;
	}

	public void setPersonaIdiomaList(List<PersonaIdioma> personaIdiomaList) {
		this.personaIdiomaList = personaIdiomaList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<Discapacidad> getDiscapacidadList() {
		return discapacidadList;
	}

	public void setDiscapacidadList(List<Discapacidad> discapacidadList) {
		this.discapacidadList = discapacidadList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<SistemaPrevencionSocial> getSistemaPrevencionSocialList() {
		return sistemaPrevencionSocialList;
	}

	public void setSistemaPrevencionSocialList(
			List<SistemaPrevencionSocial> sistemaPrevencionSocialList) {
		this.sistemaPrevencionSocialList = sistemaPrevencionSocialList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<LugarAsistenciaMedica> getLugarAsistenciaMedicaList() {
		return lugarAsistenciaMedicaList;
	}

	public void setLugarAsistenciaMedicaList(
			List<LugarAsistenciaMedica> lugarAsistenciaMedicaList) {
		this.lugarAsistenciaMedicaList = lugarAsistenciaMedicaList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<RazonAcudirEstablecimientoSalud> getRazonAcudirEstablecimientoSaludList() {
		return razonAcudirEstablecimientoSaludList;
	}

	public void setRazonAcudirEstablecimientoSaludList(
			List<RazonAcudirEstablecimientoSalud> razonAcudirEstablecimientoSaludList) {
		this.razonAcudirEstablecimientoSaludList = razonAcudirEstablecimientoSaludList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<EnfermedadPadecida> getEnfermedadPadecidaList() {
		return enfermedadPadecidaList;
	}

	public void setEnfermedadPadecidaList(List<EnfermedadPadecida> enfermedadPadecidaList) {
		this.enfermedadPadecidaList = enfermedadPadecidaList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<AparatoMedico> getAparatoMedicoList() {
		return aparatoMedicoList;
	}

	public void setAparatoMedicoList(List<AparatoMedico> aparatoMedicoList) {
		this.aparatoMedicoList = aparatoMedicoList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<Vacuna> getVacunaList() {
		return vacunaList;
	}

	public void setVacunaList(List<Vacuna> vacunaList) {
		this.vacunaList = vacunaList;
	}

	// --------------------------------------------------------------------------------

	@OneToMany(mappedBy = "personaId", orphanRemoval = true)
	@LazyCollection(LazyCollectionOption.TRUE)
	public List<PlanificacionFamiliar> getPlanificacionFamiliarList() {
		return planificacionFamiliarList;
	}

	public void setPlanificacionFamiliarList(
			List<PlanificacionFamiliar> planificacionFamiliarList) {
		this.planificacionFamiliarList = planificacionFamiliarList;
	}

	// --------------------------------------------------------------------------------

	@OneToOne
	public Empleo getEmpleoId() {
		return empleoId;
	}

	public void setEmpleoId(Empleo empleoId) {
		this.empleoId = empleoId;
	}

	// --------------------------------------------------------------------------------

}
